Clojure中Transducer的julia实现, 高效的函数式编程,要理解Transducer, 需要先理解函数式编程的基本概念。
先来一个直观的例子感受一下Transducers的优势:
可见, 合理应用Transducer进行函数式编程,可以有效减少内存占用、GC时间等, 提高效率。
reducible: 可以适用reduce操作的数据;
transducer: reduce之前对数据进行处理的函数[集合], 称为变换函数xf, 可以分为两种:
bottom: reducing函数, 有时也叫step或op;
transducible process: 组配整个过程的高阶函数;
eduction: Transducer中的reducible对象, 适配foldl等函数从而提升效率;
Inner transducer: 给定rf = xf1' ∘ xf2', xf2是rf的内部transducer。
Executor: 执行器, 指定transducer的执行机制, 如SequentialEx, ThreadedEx, DistributedEx等, 通常不需要手动配置。
还是用一个例子来证明:
二者最大的区别, 是transducer的xf组合发生在计算阶段, 而iterator的组合发生在输入阶段, 把二者的代码分别转换成更低级代码为: